<?php
/**
 * Klasse für Tickets
 */
class Model_Ticket extends Zend_Db_Table_Abstract
{
    /** Table name */
    protected $_name = 'ticket';
	/** Primary Key */
    protected $_primary = 'tid';
    
    const STATUS_TOBILL = "abrechenbar";
    const STATUS_BILLED = "Rechnung geschrieben";
    const STATUS_COMPLETED = "erledigt";
    const STATUS_PROCESSING = "in Arbeit";
    
    const TICKETS_PER_PAGE = 15;

    public function createTicket($data) {
    	
    	//Der Parameter edittype muss aus den Postdaten entfernt werden, da es kein entsprechendes DB-Feld gibt
    	unset($data['edittype']);
    	//@TODO: Macht es evtl. Sinn, hier ein Array mit erlaubten Feldnamen zu erstellen, über das dann die Postdaten gefiltert werden?
    	
    	//Objekt für den aktuellen User
		$user = Zend_Auth::getInstance()->getIdentity();
    	//Ersteller-ID verspeichern
    	$data['ownerid'] = $user->uid;
    	//Erstellersdatum verspeichern
    	$data['created'] = time();
    	
    	//Datum in Timestamp umwandeln
    	$data['deadline'] = strtotime($data['deadline']);
    	
    	$lastinsert_id = parent::insert($data);
    	return $lastinsert_id;
    	
    }
    
	public function updateTicket($tid, $data) {
    	
    	//Der Parameter edittype muss aus den Postdaten entfernt werden, da es kein entsprechendes DB-Feld gibt
    	unset($data['edittype']);
    	unset($data['tid']);
    	//@TODO: Macht es evtl. Sinn, hier ein Array mit erlaubten Feldnamen zu erstellen, über das dann die Postdaten gefiltert werden?
    	
    	//Datum in Timestamp umwandeln
    	$data['deadline'] = strtotime($data['deadline']);
    	//evtl Bearbeitungsdatum verspeichern
    	if($data['status'] == self::STATUS_PROCESSING) $data['processed'] = time();
    	
    	$rows_updated = $this->update($data, $this->getAdapter()->quoteInto('tid = ?',$tid));
    	return $rows_updated;
    	
    }
    
	public function deleteTicket($tid) {
    	
    	$rows_deleted = $this->delete($this->getAdapter()->quoteInto('tid = ?',$tid));
    	return $rows_deleted;
    	
    }
    
	public function getAll($where = null, $order = null, $count = null, $offset = null)
	{
		//Objekt für den aktuellen User
		$user = Zend_Auth::getInstance()->getIdentity();
		//Where-Abfrage muss hier leicht modifiziert werden, damit die Projektnamen auch im Array enthalten sind
		$where = $this->select();
		$where->from($this)
        	->from("project", array("ptitle"))                       
            ->setIntegrityCheck(false)
            ->where('ticket.pid = project.pid')
            //->orWhere('ticket.pid = 0')
            ->group('ticket.tid');          
        //"alle" heißt im Fall von Kunden/Entwicklern, dass nur die zugeordneten Projekte geholt werden
        if($user->rid == Model_Role::ROLE_CLIENT || $user->rid == Model_Role::ROLE_DEVELOPER) {
			$where->from("rel_projects_user")
				->where('project.pid = rel_projects_user.pid')
				->where('rel_projects_user.uid = ?', $user->uid);
		}

    	return $this->fetchAll($where, $order, $count, $offset);
	}
    
	public function getTicketByID($tid) {
    	
    	$ticket = $this->find($tid)->toArray();
		return count($ticket) == 1 ? $ticket[0] : false;
    	
    }
	
    public function getTicketsByOwnerID($oid) {
    	
    	//$tickets = $this->find($oid)->toArray();
		//return $tickets;
    	
    }
    
    public function getTicketsByProjectID($pid) {
    	
    	//Objekt für den aktuellen User
		$user = Zend_Auth::getInstance()->getIdentity();
		//Where-Abfrage muss hier leicht modifiziert werden, damit die Projektnamen auch im Array enthalten sind
		$where = $this->select();
		$where->from($this)
        	->from("project", array("ptitle"))                       
            ->setIntegrityCheck(false)
            ->where('ticket.pid = project.pid')
            ->where('ticket.pid = ?', $pid)
            //->orWhere('ticket.pid = 0')
            ->group('ticket.tid');          
        //"alle" heißt im Fall von Kunden/Entwicklern, dass nur die zugeordneten Projekte geholt werden
        if($user->rid == Model_Role::ROLE_CLIENT || $user->rid == Model_Role::ROLE_DEVELOPER) {
			$where->from("rel_projects_user")
				->where('project.pid = rel_projects_user.pid')
				->where('rel_projects_user.uid = ?', $user->uid);
		}

    	return $this->fetchAll($where, $order, $count, $offset);
    	
    }
    
	public function setStatus($status, $tid)
	{
    	$data = array("status" => $status);
    	//evtl Bearbeitungsdatum verspeichern
    	if($status == self::STATUS_PROCESSING) $data['processed'] = time();
		$rows_updated = $this->update($data, $this->getAdapter()->quoteInto('tid = ?',$tid));
    	return $rows_updated;
	}
    
    public function getTicketsByStatus($status)
	{
    	//Where-Abfrage muss hier leicht modifiziert werden, damit die Projektnamen auch im Array enthalten sind
		$where = $this->select()
        					->from($this)
                         	->from("project", array("ptitle"))                       
                         	->setIntegrityCheck(false)
                         	->where('status = ?', $status)
                         	->where('ticket.pid = project.pid')
                         	->group('ticket.tid');
    	return $this->fetchAll($where, $order, $count, $offset);
	}
    
};

?>